//
//  UITableView+Extension.swift
//  Utility
//
//  Created by 于虎拴 on 2023/2/17.
//

import Foundation
import UIKit

public protocol ReusableIdentifierType: AnyObject {
  static var reusableIdentifier: String { get }
}

extension UITableViewCell: ReusableIdentifierType {
  public static var reusableIdentifier: String {
    return String(describing: Self.self)
  }
}

extension UITableViewHeaderFooterView: ReusableIdentifierType {
  public static var reusableIdentifier: String {
    return String(describing: Self.self)
  }
}

open class TableViewCell<T: Equatable>: UITableViewCell {
  open var item: T? {
    didSet {
      update(item, oldValue)
    }
  }
  
  func update(_ newItem: T?, _ oldItem: T?) {
    switch (newItem, oldItem) {
    case let (.some(item), .some(old)) where item != old:
      update(item)
    case (.some(let item), .none):
      update(item)
    default:
      break
    }
  }
  
  open func update(_ item: T) {
    
  }
}
